#!/usr/bin/python
#coding:utf-8
#Projeto Locadora

import wx
import sys

class CadastrarCliente(wx.Dialog):
    def __init__(self, parent, id, title):
        wx.Dialog.__init__(self, parent, id, title, size=(500,500), style=wx.DEFAULT_DIALOG_STYLE)


        nome = wx.StaticText(self, -1, 'CADASTRO CLIENTE', (200, 10))      
                
        #Nome, CPF, Curso, Periodo, Endereço, Data de nascimento, Telefone.
        wx.StaticText(self,1,'Nome:',(20,50))
        wx.StaticText(self,2,'CPF:',(20,80))
        wx.StaticText(self,3,'Endereco:',(20,110))
        wx.StaticText(self,4,'Telefone:',(20,140))
        wx.StaticText(self,5,'Celular:',(200,140))
        wx.StaticText(self,5,'Email:',(20,170))

        #Caixas de texto.
        self.nome=wx.TextCtrl(self,10,'',(60,50),(300,-1))
        self.cpf=wx.TextCtrl(self,11,'',(60,80),(100,-1))
        self.endereco=wx.TextCtrl(self,12,'',(80,110),(300,-1))
        self.telefone=wx.TextCtrl(self,13,'',(80,140),(100,-1))
        self.celular=wx.TextCtrl(self,14,'',(250,140),(100,-1))
        self.email=wx.TextCtrl(self,15,'',(60,170),(200,-1))

        #Criar Botoes
        wx.Button(self, 20, "Adicionar", (300,180))
        wx.Button(self, 21, "Cancelar", (380,230))
        wx.Button(self, 22, "Remover", (300,230))
        wx.Button(self, 23, "Limpar", (380,180))
        wx.Button(self, 24, "Load", (140,230))
        wx.Button(self, 25, "Editar", (220,230))

        #Criar Eventos
        self.Bind(wx.EVT_BUTTON,self.OnAdd, id=20 )
        self.Bind (wx.EVT_BUTTON, self.OnClose, id=21)
        self.Bind(wx.EVT_BUTTON,self.OnRemove, id=22 )
        self.Bind(wx.EVT_BUTTON,self.OnClear, id=23 )
        self.Bind(wx.EVT_BUTTON,self.OnLoad, id=24 )
        self.Bind(wx.EVT_BUTTON,self.OnEdit, id=25 )
        

        #Criar Colunas de Visualização
        self.lc = wx.ListCtrl(self, -1, pos=(0,270), style=wx.LC_REPORT, size=(500,200))
        self.lc.InsertColumn(0, 'Nome')
        self.lc.InsertColumn(1, 'CPF')
        self.lc.InsertColumn(2, 'Endereco')
        self.lc.InsertColumn(3, 'Telefone')
        self.lc.InsertColumn(4, 'Celular')
        self.lc.InsertColumn(5, 'Email')
        self.lc.SetColumnWidth(0, 140)
        self.lc.SetColumnWidth(1, 153)
        self.lc.SetColumnWidth(2, 140)
        self.lc.SetColumnWidth(3, 153)
        self.lc.SetColumnWidth(4, 140)
        self.lc.SetColumnWidth(5, 153)
        
    #Função para Fechar
    def OnClose(self, event):
        self.Close()

    #Função para Add um novo Cliente
    def OnAdd(self, event):
        lista_Nomes = []
        lista_Cpf = []
        lista_Endereco = []
        lista_Telefone = []
        lista_Celular = []
        lista_Email = []

        lista_Nomes.append(self.nome.GetValue())
        lista_Cpf.append(self.cpf.GetValue())
        lista_Endereco.append(self.endereco.GetValue())
        lista_Telefone.append(self.telefone.GetValue())
        lista_Celular.append(self.celular.GetValue())
        lista_Email.append(self.email.GetValue())
        #Pega a string da lista e organiza para colocar no arquivo
        def FormarString(lista):
            string_X=''
            for x in lista:
                string_X = string_X + x + '|'
            string_X = string_X[:-1]
            return string_X

        nome = FormarString(lista_Nomes)
        cpf = FormarString(lista_Cpf)
        endereco = FormarString(lista_Endereco)
        telefone = FormarString(lista_Telefone)
        celular = FormarString(lista_Celular)
        email = FormarString(lista_Email)
        

        Adicionar=open('C:\Users\Nicollas\Desktop\Locadora 14.07\cadrasto.txt','a+')
        Adicionar.write(nome +"|"+ cpf +"|"+ endereco +"|"+ telefone +"|"+ celular +"|"+ email + "\n")
        Adicionar.close()

        #--------------------------------------------------------------------------------------#
        
        #Serve para Add nas Colunas de Vizualização
        if not nome or not cpf or not endereco or not telefone or not celular or not email:
            return
        num_items = self.lc.GetItemCount()
        self.lc.InsertStringItem(num_items, nome)
        self.lc.SetStringItem(num_items, 1, cpf)
        self.lc.SetStringItem(num_items, 2, endereco)
        self.lc.SetStringItem(num_items, 3, telefone)
        self.lc.SetStringItem(num_items, 4, celular)
        self.lc.SetStringItem(num_items, 5, email)

        self.nome.Clear()
        self.cpf.Clear()
        self.endereco.Clear()
        self.telefone.Clear()
        self.celular.Clear()
        self.email.Clear()

    #Função para Carregar o Arquivo Cadrasto
    def OnLoad(self, event):
        arquivo = open('C:\Users\Nicollas\Desktop\Locadora 14.07\cadrasto.txt','r')
        Pessoas_Arquivo = arquivo.readlines()
        arquivo.close()

        String_Pessoas= []
        
        for i in Pessoas_Arquivo:
            x=i.replace("\n","")
            y=x.split("|")
            String_Pessoas.append(y)

        for j in String_Pessoas:
            x=self.lc.InsertStringItem(sys.maxint,j[0])
            self.lc.SetStringItem(x,1,j[1])
            self.lc.SetStringItem(x,2,j[2])
            self.lc.SetStringItem(x,3,j[3])
            self.lc.SetStringItem(x,4,j[4])
            self.lc.SetStringItem(x,5,j[5])

        

    #Função para remover um Cliente
    def OnRemove(self, event):
        Caixa_Dialogo = wx.MessageBox('Tem Certeza que Deseja Remover?', 'Aviso!', wx.YES_NO | wx.CENTRE |wx.NO_DEFAULT)
        
        if Caixa_Dialogo == wx.YES:
            arq = open('C:\Users\Nicollas\Desktop\Locadora 14.07\cadrasto.txt','r')
            linha = arq.readlines()
            arq.close()
            
            index = self.lc.GetFocusedItem()
            self.lc.DeleteItem(index)

            del linha[index]

            arq = open('C:\Users\Nicollas\Desktop\Locadora 14.07\cadrasto.txt','w')
            arq.writelines(linha)
            arq.close()
        if Caixa_Dialogo==wx.NO:
            pass
            
        event.Skip()

    #Função para Limpar Campo de Digitação
    def OnClear(self, event):
        self.nome.Clear()
        self.cpf.Clear()
        self.endereco.Clear()
        self.telefone.Clear()
        self.celular.Clear()
        self.email.Clear()

    #Editar dados dos Clientes
    def OnEdit(self,event):
        Caixa_Dialogo = wx.MessageBox('Tem Certeza que Deseja Editar?', 'Aviso!', wx.YES_NO | wx.CENTRE |wx.NO_DEFAULT)
        
        if Caixa_Dialogo == wx.YES:
            arq = open('C:\Users\Nicollas\Desktop\Locadora 14.07\cadrasto.txt','r')
            linha = arq.readlines()
            arq.close()
            
            index = self.lc.GetFocusedItem()
            self.lc.DeleteItem(index)

            x=linha[index]

            tirar = x.replace("\n","")
            k = tirar.split("|")

            self.nome.SetValue(k[0])
            self.cpf.SetValue(k[1])
            self.endereco.SetValue(k[2])
            self.telefone.SetValue(k[3])
            self.celular.SetValue(k[4])
            self.email.SetValue(k[5])

            del linha[index]

            arq = open('C:\Users\Nicollas\Desktop\Locadora 14.07\cadrasto.txt','w')
            arq.writelines(linha)
            arq.close()
        if Caixa_Dialogo==wx.NO:
            pass
            
        event.Skip()

    
listaGeneros = ['Acao','Aventura','Comedia','Infantil','Romance','Suspence','Terror','XXX']
class CadastrarFilmes(wx.Dialog):
    def __init__(self, parent, id, title):
        wx.Dialog.__init__(self, parent, id, title, size=(500,500), style=wx.DEFAULT_DIALOG_STYLE)
        
        nome = wx.StaticText(self, -1, 'CADASTRO FILME', (200, 10))     

        #Nome, CPF, Curso, Periodo, Endereço, Data de nascimento, Telefone.
        wx.StaticText(self,1,'Nome Filme:',(20,50))
        wx.StaticText(self,2,'Ano:',(20,80))
        wx.StaticText(self,3,'Quandidade:',(200,80))
        wx.StaticText(self,4,'Genero:',(20,120))
        
        #Caixas de texto.
        self.nome_filme=wx.TextCtrl(self,12,'',(80,47),(150,-1))
        self.ano=wx.TextCtrl(self,13,'',(50,77),(100,-1))
        self.qtd=wx.TextCtrl(self,14,'',(270,77),(50,-1))
        self.genero=wx.ComboBox(self,15,'',(90,117),(150,-1),choices=listaGeneros,style=wx.CB_READONLY|wx.CB_SORT)

        #Criar Botoes
        wx.Button(self, 20, "Adicionar", (300,150))
        wx.Button(self, 21, "Cancelar", (380,230))
        wx.Button(self, 22, "Load", (380,150))
        wx.Button(self, 23, "Remover", (300,230))
        wx.Button(self, 24, "Editar", (220,230))
        
        #Criar Eventos
        self.Bind (wx.EVT_BUTTON, self.OnAdd, id=20)
        self.Bind (wx.EVT_BUTTON, self.OnClose, id=21)
        self.Bind (wx.EVT_BUTTON, self.OnLoad, id=22)
        self.Bind (wx.EVT_BUTTON, self.OnRemove, id=23)
        self.Bind (wx.EVT_BUTTON, self.OnEdit, id=24)

        #Criar Colunas de Visualização
        self.lc = wx.ListCtrl(self, -1, pos=(0,270), style=wx.LC_REPORT, size=(500,200))
        self.lc.InsertColumn(0, 'Filme')
        self.lc.InsertColumn(1, 'Ano')
        self.lc.InsertColumn(2, 'Genero')
        self.lc.InsertColumn(3, 'Quandidade')
        self.lc.SetColumnWidth(0, 140)
        self.lc.SetColumnWidth(1, 153)
        self.lc.SetColumnWidth(2, 140)
        self.lc.SetColumnWidth(3, 153)
        
    #Função para Fechar
    def OnClose(self, event):
        self.Close()

    #Função para Add um novo Filme
    def OnAdd(self,event):
        listaFilmes= []
        listaAnos = []
        listaQtd = []
        listaGeneros = []

        listaFilmes.append(self.nome_filme.GetValue())
        listaAnos.append(self.ano.GetValue())
        listaQtd.append(self.qtd.GetValue())
        listaGeneros.append(self.genero.GetValue())

        #Pega a string da lista e organizar para colocar no arquivo
        def FormarString(lista):
            string_X=''
            for x in lista:
                string_X = string_X + x + '|'
            string_X = string_X[:-1]
            return string_X

        filme = FormarString(listaFilmes)
        ano = FormarString(listaAnos)
        genero = FormarString(listaGeneros)
        qtd = FormarString(listaQtd)


        Adicionar = open('C:\Users\Nicollas\Desktop\Locadora 14.07\ListaFilmes.txt','a+')
        Adicionar.write(filme + "|" + ano + "|" + genero + "|" + qtd + "\n")
        Adicionar.close()

        #--------------------------------------------------------------------------------------#
        
        #Serve para Add nas Colunas de Vizualização
        if not filme or not ano or not genero or not qtd:
            return
        num_items = self.lc.GetItemCount()
        self.lc.InsertStringItem(num_items, filme)
        self.lc.SetStringItem(num_items, 1, ano)
        self.lc.SetStringItem(num_items, 2, genero)
        self.lc.SetStringItem(num_items, 3, qtd)
        self.nome_filme.Clear()
        self.ano.Clear()
        self.qtd.Clear()

    #Função para Carregar o Arquivo Cadrasto Filme
    def OnLoad(self, event):
        arquivo = open('C:\Users\Nicollas\Desktop\Locadora 14.07\ListaFilmes.txt','r')
        Filmes_Arquivo = arquivo.readlines()
        arquivo.close()

        String_Filmes= []
        
        for i in Filmes_Arquivo:
            x=i.replace("\n","")
            y=x.split("|")
            String_Filmes.append(y)

        for j in String_Filmes:
            x=self.lc.InsertStringItem(sys.maxint,j[0])
            self.lc.SetStringItem(x,1,j[1])
            self.lc.SetStringItem(x,2,j[2])
            self.lc.SetStringItem(x,3,j[3])

        

    #Função para remover um Filme
    def OnRemove(self, event):
        Caixa_Dialogo = wx.MessageBox('Tem Certeza que Deseja Remover?', 'Aviso!', wx.YES_NO | wx.CENTRE |wx.NO_DEFAULT)
        
        if Caixa_Dialogo == wx.YES:
            arq = open('C:\Users\Nicollas\Desktop\Locadora 14.07\ListaFilmes.txt','r')
            linha = arq.readlines()
            arq.close()
            
            index = self.lc.GetFocusedItem()
            self.lc.DeleteItem(index)

            del linha[index]

            arq = open('C:\Users\Nicollas\Desktop\Locadora 14.07\ListaFilmes.txt','w')
            arq.writelines(linha)
            arq.close()
        if Caixa_Dialogo==wx.NO:
            pass
            
        event.Skip()

    #Editar dados dos Filmes
    def OnEdit(self,event):
        Caixa_Dialogo = wx.MessageBox('Tem Certeza que Deseja Editar?', 'Aviso!', wx.YES_NO | wx.CENTRE |wx.NO_DEFAULT)
        
        if Caixa_Dialogo == wx.YES:
            arq = open('C:\Users\Nicollas\Desktop\Locadora 14.07\ListaFilmes.txt','r')
            linha = arq.readlines()
            arq.close()
            
            index = self.lc.GetFocusedItem()
            self.lc.DeleteItem(index)

            x=linha[index]

            tirar = x.replace("\n","")
            k = tirar.split("|")

            self.nome_filme.SetValue(k[0])
            self.ano.SetValue(k[1])
            self.genero.SetValue(k[2])
            self.qtd.SetValue(k[3])

            del linha[index]

            arq = open('C:\Users\Nicollas\Desktop\Locadora 14.07\ListaFilmes.txt','w')
            arq.writelines(linha)
            arq.close()
        if Caixa_Dialogo==wx.NO:
            pass
            
        event.Skip()


class MyMenu(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(450, 200))

        sw = wx.ScrolledWindow(self)
        bmp = wx.Image('C:\Users\Nicollas\Desktop\Locadora 14.07\Logo_videoloc.png',wx.BITMAP_TYPE_ANY).ConvertToBitmap()
        wx.StaticBitmap(sw, -1, bmp, (20,30))

        #Criando MenuBar
        menubar = wx.MenuBar()

        #------------------------------------------------------------------------------------------------------------------

        #Criando Primeiro Menu

        file = wx.Menu()
        file.Append(101, '&Usuario', 'Cadrasta Usuario')
        file.Append(102, '&Filme', 'Cadrasta Filme')
        file.AppendSeparator()

        #-------------------------------------------------------------------------------------------------------------------
        
        #Adicionando Imagem ao Menu
        quit = wx.MenuItem(file, 105, '&Sair\tCtrl+Q', 'Quit the Application')
        quit.SetBitmap(wx.Image('C:\Users\Nicollas\Desktop\Locadora 14.07\peste.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap())
        file.AppendItem(quit)

        #-------------------------------------------------------------------------------------------------------------------

        #Adicionando Menus ao MenuBar
        menubar.Append(file, '&Arquivo')
        self.SetMenuBar(menubar)
        self.Centre()
        self.Bind(wx.EVT_MENU, self.OnQuit, id=105)
        self.Bind(wx.EVT_MENU, self.CadrastaCliente, id=101)
        self.Bind(wx.EVT_MENU, self.CadrastaFilme, id=102)

        #-------------------------------------------------------------------------------------------------------------------

    def CadrastaCliente(self,event):
        cadastrar_Cliente=CadastrarCliente(self,-1,"Cadastrar Cliente")
        cadastrar_Cliente.ShowModal()
        cadastrar_Cliente.Destroy()

    def CadrastaFilme(self,event):
        cadastrar_Filme=CadastrarFilmes(self,-1,"Cadastrar Filme")
        cadastrar_Filme.ShowModal()
        cadastrar_Filme.Destroy()


    def OnQuit(self, event):
        self.Close()


class MyApp(wx.App):
    def OnInit(self):
        frame = MyMenu(None, -1, 'VideoLoc v1.0')
        frame.Show(True)
        frame.Centre()
        return True

app = MyApp(0)
app.MainLoop()
